package br.com.logistica.mbean;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.event.ActionEvent;

import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;

import br.com.logistica.delegate.BusinessDelegate;
import br.com.logistica.util.dto.ServiceDTO;
import br.com.logistica.vo.Cliente;
import br.com.logistica.vo.Endereco;

public class ClienteManagedBean implements Serializable {
	private static Logger logger = Logger.getLogger(ClienteManagedBean.class);

	private List<Cliente> clientes = null;
	private ServiceDTO requestDTO = new ServiceDTO();
	private ServiceDTO responseDTO = new ServiceDTO();
	private Cliente cliente = new Cliente();
	private Endereco endereco = new Endereco();
	private List<Endereco> listaEndereco = new ArrayList<Endereco>();

	public ClienteManagedBean() {
		clientes = atualizarClientes();
	}

	public void adicionarEndereco(ActionEvent actionEvent) {
		endereco.setClientes(cliente);

		listaEndereco.add(endereco);

		endereco = new Endereco();

		RequestContext.getCurrentInstance().update(
				":menu:formulario:Endereco:gridEnderecos");
	}

	public void limparCliente() {
		cliente = new Cliente();
	}

	public void persistirCliente(ActionEvent actionEvent) {
		cliente.setEnderecos(listaEndereco);

		requestDTO.set("cliente", cliente);

		try {
			responseDTO = BusinessDelegate.getInstance().inserirCliente(
					requestDTO);

			if (responseDTO.get("operacao").equals("persistencia")) { // cadastro
			} else { // alteracao
			}

			limparServiceDTO();
			atualizarClientes();
		} catch (Exception e) {
			logger.error(e);
		}
	}

	public void deletarCliente(ActionEvent actionEvent) {
		requestDTO.set("cliente", cliente);

		try {
			responseDTO = BusinessDelegate.getInstance().deletarCliente(
					requestDTO);

			limparServiceDTO();
			atualizarClientes();
		} catch (Exception e) {
			logger.error(e);
		}
	}

	private ArrayList<Cliente> atualizarClientes() {
		List<Cliente> clientesBanco = null;

		try {
			responseDTO = BusinessDelegate.getInstance()
					.pesquisarTodosClientes();
			clientesBanco = (ArrayList<Cliente>) responseDTO.get("cliente");
			clientes = clientesBanco;

			limparServiceDTO();
		} catch (Exception e) {
			logger.error(e);
		}

		return ((ArrayList<Cliente>) clientesBanco);
	}

	private void limparServiceDTO() {
		cliente = new Cliente();
		requestDTO = new ServiceDTO();
		responseDTO = new ServiceDTO();
	}

	public Cliente getCliente() {
		return (cliente);
	}

	public void setCliente(Cliente cliente) {
		this.cliente = cliente;
	}

	public List<Cliente> getClientes() {
		return (clientes);
	}

	public void setClientes(List<Cliente> clientes) {
		this.clientes = clientes;
	}

	public Endereco getEndereco() {
		return (endereco);
	}

	public List<Endereco> getListaEndereco() {
		return (listaEndereco);
	}

	public void setListaEndereco(List<Endereco> listaEndereco) {
		this.listaEndereco = listaEndereco;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}
}
